iT邦幫忙

0

Android 基本(2) - Intent 基本觀念與使用釐清

  • 分享至 

  • xImage
  •  

前言

近期想要好好地歸納與釐清一些基礎觀念,因此整理加分享的同步把東西整理放上來,有的部分可能比較基礎請見諒

當我們有了多個 Activity 的時候我們一定會開始想到,我們該如何從一個 activity 去啟動另外一個 activity,又或者我們要怎麼進行兩個 activity 間的資料通等等的問題,這時候最常見的方式就是使用我們今天的主角 Intent


種類

Intent 常見也常用,但是也常常忘記它其實有著兩種模式(還是只有我一直忘記...= =),下方名稱網路上對他們的名稱有些需的差異,在這邊以 android doc 上名稱為主。

  1. 明確意圖(Explicit intents):官方的說明有點冗長,講白一點就是在指定啟動元件的時候,我們直接使用名稱(完整的類別名稱)進行指定。
    例如:
    Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
  2. 隱含意圖(Implicit intents):在宣告的時候不指定給特定的元件,而是針對功能、動作進行宣告,來讓定一個應用程式的元件進行處理。
    例如:在APP中開啟網頁,系統發現手機上有chrome以及預設瀏覽器提供網頁瀏覽的功能,這時候便會跳出選單讓使用者選擇。

建置

在建置 Intent 的時候有幾個常見且主要可以包含的資訊有:

  • 元件名稱:此項為可選用,不過當我們沒有填入元件名稱時,這個 intent 便會成為一個「隱含」的意圖,反之我們若是要建置一個「明確」的意圖,則我們必須要為他指派元件名稱。可以使用 setComponent()setClass()setClassName() 做設定。
  • 動作:為 intent 指定要執行的動作,以已透過使用 setAction() 進行設定,而常見的動作有 ACTION_VIEWACTION_SEND 等等。
  • 資料:通常這邊提供的資料會是由 intent 來進行控制,例如要是在上一項動作設定為 ACTION_EDIT 則資料應該包含打算編輯的 URI。另外也可以根據目的進行設定,像是 setData()setType()、甚至是 setDataAndType()
  • 類別:用來處理intent的其他相關資訊。通常不一定類別:用來處理intent的其他相關資訊。通常大部分的 intent 是不需要加上類別的。例子如下:CATEGORY_BROWSABLE 目標的 activity可以自己使用網頁瀏覽器啟動,已顯示連結所參照的資料。
  • 額外資料:這個值主要傳入為了完成目的所需的其他資訊。我們可以使用各類的 putExtra() ,例如放 int 的、放 string 的、放 byte 的,甚至還可以放 array 類型的額外資料,這些種類方法都續傳入兩個參數:索引鍵名稱 (key name) 與值 (value)。像是當我們建立 intent 使用 ACTION_SEND 來傳送電子郵件的時候,我們可以使用 EXTRA_EMAIL 來指定收件者,並使用 EXTRA_SUBJECT 來指定主旨

範例

  • 明確意圖範例

    Intent intent	=	new	Intent(FirstActivity.this, SecondActivity.class);
    startActivity(intent);
    

    這邊我的例子是在兩個 activity 間的互動,service相關使用可以參考 google doc 中的範例。

  • 隱含意圖範例

    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("https://google.com"));
    startActivity(intent);
    

    這邊這個例子是開啟網頁的使用,另外在 google doc 中的例子是發送電子郵件,也可以進行參考。


補充

前面的例子有提到,可以去喚醒其他有支援我們請求的 activity 或是 app,那反之其實我們也可以在自己的 activity 中去加入相關的聲明,加入之後我們便可以在其他 activity 中去對這個請求的 intent 進行回應。

這邊附上如何加入相關聲明的例子:(在 AndroidMainfest.xml 中對你想要賦予聲明的 activity 加入相應的內容)

<activity android:name=".ThirdActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="https" />
    </intent-filter>
</activity>

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言